package 字节流;

import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class 对图片进行加密解密 {
    //图片加密
    @Test
    public void encryptionPhoto() throws IOException {
        //创建一个文件对象
        File f1 = new File("1.jpeg");
        //指定一个输入字节流
        FileInputStream fis = new FileInputStream(f1);
        //指定一个输出字节流
        FileOutputStream fos = new FileOutputStream("加密图片.jpeg");
        //对图片加密输出
        byte[] buffer = new byte[5];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            //加密代码如下：就是对字节数据进行修改
            for (int i = 0; i < len; i++) {
                buffer[i] = (byte) (buffer[i] ^ 5);
            }
            fos.write(buffer, 0, len);
        }
        //关闭资源
        fos.close();
        fis.close();

    }

    //图片解密
    @Test
    public void decryptPhoto() throws IOException {
        //创建一个文件对象
        File f1 = new File("加密图片.jpeg");//以加密图片作为操作文件对象
        //指定一个输入字节流
        FileInputStream fis = new FileInputStream(f1);
        //指定一个输出字节流
        FileOutputStream fos = new FileOutputStream("解密图片.jpeg");
        //对图片加密输出
        byte[] buffer = new byte[5];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            //解密代码如下：就是对字节数据进行复原。根据异或运算规则: m^n^n=m
            for (int i = 0; i < len; i++) {
                buffer[i] = (byte) (buffer[i] ^ 5);
            }
            fos.write(buffer, 0, len);
        }
        //关闭资源
        fos.close();
        fis.close();
    }
}
